Electronic systems and circuits may experience random errors for a variety of reasons, including exposure to ionizing radiation, and poor signal integrity. As such, fault tolerant circuits may be built into the system design. Fault tolerant circuits can range from more robust error mitigation approaches such as circuit redundancies to the less robust approaches such as bit checking. As a general rule, more robust error mitigation circuitry comes at the cost of using more chip area. Balancing these trade-offs can present challenges when designing circuits.
Recent trends in circuit design include the use of high-level programming languages (HLLs) to design electronic circuits. For example, a circuit design can be specified initially as a program written in an HLL such as Fortran, C/C++, JAVA, or the like. This approach allows a developer to concentrate on an algorithmic solution to a problem rather than the specific hardware involved. A variety of different tools are available which effectively translate the HLL program into a synthesizable netlist or other software-based circuit representation. For example, tools for Compiling High Level Language into Massively Pipelined Systems (CHiMPS) provide means to compile programs written in languages such as C and Fortran into an intermediate target language, which can be further processed to implement the design in a suitable combination of hardware and software. The CHiMPS tools are described by David W. Bennett in U.S. Pat. No. 7,315,991 entitled “Compiling HLL into Massively Pipelined Systems”, issued Jan. 1, 2008, which is incorporated herein by reference.
Software compilers and Hardware Description Language (HDL) compilers often employ intermediate representations of the program/hardware description being compiled to improve the modularity of the compilation process, thus making the compiler itself simpler or more flexible. The intermediate representation of a program may be expressed in terms of templates to be instantiated by inserting specific details of the program being compiled.